// app/controller/user.js
const BaseController = require('../core/base_controller');

class BankController extends BaseController {
  async get() {
    // 构建参数
    const params = [];
    const paramNames = [ 'kw_1', 'kw_2', 'kw_3', 'kw_4' ];
    // throw new Error("参数错误");
    
    paramNames.forEach(paramName => {
      const value = this.getParam(paramName);
      if (value !== null) {
        params.push(value);
      }
    });

    if(params.length === 0) {
      this.fail('请输入查询参数');
      return;
    }

    // 第一步,精确查找：判断是否只传一个参数
    if (params.length === 1) {
      const result = await this.ctx.service.bank.findOne(params[0]);
      if (result.length === 1) {
        this.success({ rows: result });
        return;
      } else {
        // 对传入的参数进行字符串智能切分后进行模糊匹配
        const splitParams = this.smartSplit(params[0]);
        const result = await this.ctx.service.bank.find(splitParams);
        if (result.length > 20) {
          this.fail('查询数据量过大，请调整查询条件');
          return;
        }
        this.success({ rows: result , splitStr: splitParams});
      }
    } else {
      const result = await this.ctx.service.bank.find(params);
      if (result.length > 20) {
        this.fail('查询数据量过大，请调整查询条件');
        return;
      }
      this.success({ rows: result });
    }
  }

  // 关键词智能切分字符串方法
  smartSplit(str) {
    // 处理边界情况
    if (!str || typeof str !== 'string') {
      return [];
    }

    // 常见的银行相关关键词
    const keywords = [ '银行', '信用合作', '支行', '分行', '营业部', '储蓄所', '办事处', '营业室', '分理处', '股份', '有限公司', '责任公司','市','区','县','镇'];
    
    // 构建正则表达式，按长度降序排列关键词以确保长匹配优先
    const escapedKeywords = keywords.map(keyword => keyword.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'));
    const regexPattern = `(${escapedKeywords.join('|')})`;
    const regex = new RegExp(regexPattern, 'g');
    
    const result = [];
    let lastIndex = 0;
    let match;
    
    // 使用正则表达式查找所有匹配项
    while ((match = regex.exec(str)) !== null) {
      // 添加匹配项之前的文本（如果存在且长度大于1）
      if (match.index > lastIndex) {
        const prefix = str.substring(lastIndex, match.index);
        result.push(prefix);
      }
      
      // 添加匹配到的关键词
      // result.push(match[0]);
      lastIndex = match.index + match[0].length;
    }
    
    // 添加末尾剩余的文本（如果存在且长度大于1）
    if (lastIndex < str.length) {
      const suffix = str.substring(lastIndex);
      result.push(suffix);
    }
    
    // 过滤空字符串
    return result.filter(item => item.length > 0);
  }

  // TODO:使用jieba分词
  jiebaSplit(str) {}
}

module.exports = BankController;
